package com.baoyouqun.base.utils;

import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

/**
 * Excel导出工具类
 */
public class ExcelTool {

    /**
     * 设置Excel导出的响应头和文件名（菜单名称+时间戳）
     *
     * @param response HTTP响应对象
     * @param menuName 菜单名称，将作为文件名的一部分
     * @throws IOException 当编码过程中出现错误时抛出
     */
    public static void setExportFileName(HttpServletResponse response, String menuName) throws IOException {
        // 生成时间后缀（年月日时分）
        String timeSuffix = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));

        // 构建完整文件名（菜单名称+时间，注意补充文件后缀，如.xlsx）
        String fileName = menuName + "_" + timeSuffix + ".xlsx";

        // 对文件名进行UTF-8编码，解决中文乱码问题
        String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);

        // 设置响应内容类型为Excel（xlsx格式）
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setCharacterEncoding(StandardCharsets.UTF_8.name());

        // 直接设置下载头（关键：避免调用可能引发递归的方法）
        response.setHeader("Content-Disposition",
                "attachment;filename=" + encodedFileName);
    }
}
